package com.pmcc.app.web;

import com.pmcc.utils.ResultBean;
import com.pmcc.yn.service.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;

/**
 * @author chuxy 2019/4/15
 */
@RestController()
@RequestMapping("api/v1/js")
public class TechController {


    @Autowired
    UpcomingInfoService upcomingInfoService;
    @Autowired
    OrderListService orderListService;
    @Autowired
    EntryInfoService entryInfoService;
    @Autowired
    AcceptInfoService acceptInfoService;
    @Autowired
    TechnicianInfoService technicianInfoService;
    @Autowired
    EvaluateInfoService evaluateInfoService;



    /**
     * 技师端城市定位获取
     * @param xx  x坐标信息
     * @param yy y坐标信息
     * @return  城市
     */
    @ApiOperation(value = "技师端城市定位获取", httpMethod = "GET", notes = "传入xx，yy", response = ResultBean.class)
    @GetMapping(value = "getCity")
    public ResultBean getCity(String xx,String yy) {
        /**
         * 移动端传入坐标（xx，yy）来获取到技术所在城市定位
         *
         */
        return technicianInfoService.getCity(xx,yy);
    }
    /**
     * 获取技师消息通知
     * @param id  技师id
     * @return  消息通知
     */
    @ApiOperation(value = "获取技师消息通知", httpMethod = "GET", notes = "传入id", response = ResultBean.class)
    @GetMapping(value = "getMessage")
    public ResultBean getMessage(String id){
        /**
         * 移动端传入技师id，来获取到技师接单状态提醒列表
         * 任务提醒包含服务类型、门店名称、距离任务结束时间
         * 成交提醒包含服务类型、门店名称、申请订单时间
         * 未成交提醒包含服务类型、门店名称、申请订单时间
         *
         */
        return upcomingInfoService.getMessage(id);
    }
    /**
     * 获取全部订单列表
     * @param message  查询信息
     * @param xx  x坐标信息
     * @param yy y坐标信息
     * @return  订单列表
     */
    @ApiOperation(value = "获取全部订单列表", httpMethod = "GET", notes = "传入message", response = ResultBean.class)
    @GetMapping(value = "orderShow")
    public ResultBean orderShow(String message,String xx,String yy){
        /**
         * 移动端传入查询信息进行模糊查询，返回符合的订单列表
         * 订单包含订单状态、图片信息、任务内容、赏金、门店名称、任务时间、门店地址、距离门店的距离、报名人数
         *
         */
        return orderListService.orderShow(message,xx,yy);
    }
    /**
     * 获取订单详情
     * @param id  订单id
     * @param xx  x坐标信息
     * @param yy y坐标信息
     * @return  订单详情
     */
    @ApiOperation(value = "获取订单详情", httpMethod = "GET", notes = "传入订单id", response = ResultBean.class)
    @GetMapping(value = "orderById")
    public ResultBean orderById(String id,String xx,String yy){
        /**
         * 移动端传入订单id
         * 订单包含订单状态、图片信息、任务内容、赏金、门店名称、任务时间、门店地址、距离门店的距离、报名人数、店主电话、详细要求
         *
         */
        return orderListService.orderById(id,xx,yy);
    }
    /**
     * 技师报名
     * @param orderId 订单id
     * @param id 技师id
     * @return  报名成功
     */
    @ApiOperation(value = "技师报名", httpMethod = "GET", notes = "传入订单id、技师id", response = ResultBean.class)
    @GetMapping(value = "orderEntry")
    public ResultBean orderEntry(String id,String orderId){
        /**
         * 移动端传入订单id、技师id,完成订单报名
         *
         */
        return entryInfoService.orderEntry(id,orderId);
    }
    /**
     * 我的订单列表
     * @param id 订单id
     * @param flag 状态（0：已报名 1：待服务 2：已完成 3：未成交 4：已超时 5：待评价）
     * @return  返回符合的订单列表
     */
    @ApiOperation(value = "我的订单列表", httpMethod = "GET", notes = "技师id，状态（已完成、已报名、待服务、待评价、未成交、已超时）", response = ResultBean.class)
    @GetMapping(value = "myOrderByFlag")
    public ResultBean myOrderByFlag(String id,int flag){
        /**
         * 移动端传入技师id、状态，返回符合的订单列表
         * 订单包含任务内容、赏金、门店名称、任务时间
         *
         */
        return acceptInfoService.myOrderByFlag(id,flag);
    }
    /**
     * 推荐
     * @param type 服务类型type
     * @param xx  x坐标信息
     * @param yy y坐标信息
     * @return  一条待接单订单
     */
    @ApiOperation(value = "推荐", httpMethod = "GET", notes = "服务类型type", response = ResultBean.class)
    @GetMapping(value = "recommend")
    public ResultBean recommend(String type,String xx,String yy){
        /**
         * 移动端传入服务类型type，得到一条待接单订单
         *
         */
        return orderListService.recommend(type,xx,yy);
    }
    /**
     * 商家反馈
     * @param id 订单id
     * @return  返回订单详情（包含任务内容、赏金、任务时间、门店名称、门店地址、店主联系电话）门店评分、评价
     */
    @ApiOperation(value = "商家反馈", httpMethod = "GET", notes = "订单id", response = ResultBean.class)
    @GetMapping(value = "orderAppraise")
    public ResultBean orderAppraise(String id){
        /**
         * 移动端传入订单id，返回订单详情（包含任务内容、赏金、任务时间、门店名称、门店地址、店主联系电话）门店评分、评价
         *
         */
        return evaluateInfoService.orderAppraise(id);
    }
    /**
     * 点击去评价
     * @param id 订单id
     * @return  返回门店名称，位置，电话
     */
    @ApiOperation(value = "点击去评价", httpMethod = "GET", notes = "订单id", response = ResultBean.class)
    @GetMapping(value = "goAppraise")
    public ResultBean goAppraise(String id){
        /**
         * 移动端传入订单id，获取门店名称，位置，电话
         *
         */
        return evaluateInfoService.goAppraise(id);
    }
    /**
     * 去评价
     * @param id 技师id
     * @param storeId 门店id
     * @param score 评分
     * @param appraise 评价
     * @param  file1 照片上传
     * @return
     */
    @ApiOperation(value = "去评价", httpMethod = "POST", notes = "技师id、门店id、评分、评价、照片上传", response = ResultBean.class)
    @PostMapping(value = "storeAppraise")
    public ResultBean storeAppraise(String id,String orderId,String storeId,Double score,String appraise,@RequestParam("file1") MultipartFile file1,@RequestParam("file2") MultipartFile file2,@RequestParam("file3") MultipartFile file3){
        /**
         * 移动端传入技师id、门店id、评分、评价、照片上传，完成对门店的评价
         *
         */
        return evaluateInfoService.storeAppraise(id,orderId,storeId,score,appraise,file1,file2,file3);
    }
    /**
     * 取消订单
     * @param id 订单id
     * @param message 原因
     * @return
     */
    @ApiOperation(value = "取消订单", httpMethod = "GET", notes = "传入订单id，原因", response = ResultBean.class)
    @GetMapping(value = "cancelOrder")
    public ResultBean cancelOrder(String id,String techId,String message){
        /**
         * 传入订单id、取消原因，修改订单的状态并扣除技师20分
         *
         *
         */
        return acceptInfoService.cancleOrder(id,techId,message);
    }
    /**
     * 我的战绩
     * @param id 技师id
     * @return 返回技师综合评分、头像、技师等级、我的战绩
     */
    @ApiOperation(value = "我的战绩", httpMethod = "GET", notes = "技师id", response = ResultBean.class)
    @GetMapping(value = "myRecord")
    public ResultBean myRecord(String id){
        /**
         * 移动端传入技师id，返回技师综合评分、头像、技师等级、我的战绩
         * 战绩详细内容有评分、评价、完成日期、服务类型、门店名称
         *
         */
        return technicianInfoService.myRecord(id);
    }
    /**
     * 个人中心
     * @param id 技师id
     * @return 返回技师姓名、头像、累计收益、电话、年龄、所在地、身份证正反面照片、订单记录（条数，显示最近一条）
     */
    @ApiOperation(value = "个人中心 ", httpMethod = "GET", notes = "技师id", response = ResultBean.class)
    @GetMapping(value = "myCenter")
    public ResultBean myCenter(String id){
        /**
         * 移动端传入技师id，返回技师姓名、头像、累计收益、电话、年龄、所在地、身份证正反面照片、订单记录（条数，显示最近一条）
         * 订单内容有任务内容、任务时间、赏金、门店名称
         *
         */
        return technicianInfoService.myCenter(id);
    }
    /**
     * 编辑个人信息
     * @param id 技师id
     * @return 返回技师姓名、头像、电话、年龄、所在地、身份证正反面照片
     */
    @ApiOperation(value = "编辑个人信息 ", httpMethod = "GET", notes = "技师id", response = ResultBean.class)
    @GetMapping(value = "techById")
    public ResultBean techById(String id){
        /**
         * 移动端传入技师id，返回技师姓名、头像、电话、年龄、所在地、身份证正反面照片
         *
         */
        return technicianInfoService.techById(id);
    }
    /**
     * 修改保存个人信息
     * @param map 技师实体
     * @return
     */
    @ApiOperation(value = "修改保存个人信息 ", httpMethod = "POST", notes = "技师实体", response = ResultBean.class)
    @PostMapping(value = "updateTech")
    public ResultBean updateTech(@RequestBody Map map){
        /**
         * 移动端传入技师实体，完成修改
         *
         */
        return technicianInfoService.update(map);
    }






}
